import json
from datetime import datetime
from pathlib import Path

class DateService:
    def __init__(self):
        self.holiday_data = self._load_holiday_data()
    
    def _load_holiday_data(self):
        """加载节假日数据"""
        try:
            holiday_file = Path("currentYearHoliday.json")
            if not holiday_file.exists():
                raise FileNotFoundError("节假日数据文件不存在，请先运行 holiday_fetcher.py 获取数据")
            
            with holiday_file.open('r', encoding='utf-8') as f:
                data = json.load(f)
                return data.get('holiday', {})
        except Exception as e:
            print(f"加载节假日数据失败: {e}")
            return {}
    
    def is_workday(self, check_date=None):
        """
        判断指定日期是否为工作日
        
        Args:
            check_date: datetime对象，默认为当前日期
            
        Returns:
            bool: True表示工作日，False表示节假日
        """
        if check_date is None:
            check_date = datetime.now()
            
        # 获取日期的月-日格式，如 "01-01"
        date_str = check_date.strftime("%m-%d")
        
        # 获取星期几（0是周一，6是周日）
        weekday = check_date.weekday()
        
        # 查找节假日数据
        holiday_info = self.holiday_data.get(date_str, {})
        
        if holiday_info:
            # holiday为True表示放假，False表示补班
            return not holiday_info.get('holiday', False)
        else:
            # 如果不在节假日数据中，周一到周五是工作日
            return weekday < 5
    
    def get_date_info(self, check_date=None):
        """
        获取指定日期的详细信息
        
        Args:
            check_date: datetime对象，默认为当前日期
            
        Returns:
            dict: 包含日期信息的字典
        """
        if check_date is None:
            check_date = datetime.now()
            
        date_str = check_date.strftime("%m-%d")
        holiday_info = self.holiday_data.get(date_str, {})
        
        return {
            'date': check_date.strftime("%Y-%m-%d"),
            'is_workday': self.is_workday(check_date),
            'holiday_name': holiday_info.get('name', ''),
            'holiday_wage': holiday_info.get('wage', 1)  # 1表示普通工作日，2和3表示法定节假日
        }
